Vistas
Una vista (VIEW) es una tabla virtual basada en una consulta SQL.
No almacena datos físicamente. Guarda únicamente la lógica de la consulta.
Ventajas
- Simplifican consultas complejas.
- Ocultan datos sensibles.
- Facilitan reporting.
- Mejoran abstracción.
- Permiten control de acceso.
Crear una vista
CREATE VIEW vista_clientes AS
SELECT nombre, ciudad
FROM clientes
WHERE activo = 1;
Uso
SELECT * FROM vista_clientes;
Transacciones
Una transacción agrupa varias operaciones SQL como una única unidad indivisible.
Objetivo
- Evitar inconsistencias.
- Garantizar integridad.
- Controlar errores.
- Proteger operaciones críticas.
Ejemplo
START TRANSACTION;
UPDATE cuentas
SET saldo = saldo - 100
WHERE id = 1;
UPDATE cuentas
SET saldo = saldo + 100
WHERE id = 2;
COMMIT;
COMMIT
Confirma cambios definitivamente.
ROLLBACK
ROLLBACK;
Deshace operaciones ante errores.
Propiedades ACID
ACID define el comportamiento seguro de las transacciones.
| Letra | Significado |
|---|---|
| A | Atomicidad |
| C | Consistencia |
| I | Aislamiento |
| D | Durabilidad |
Atomicidad
Todo o nada.
Consistencia
Los datos pasan de un estado válido a otro válido.
Aislamiento
Las transacciones paralelas no interfieren.
Durabilidad
Los cambios confirmados sobreviven a fallos.
Niveles de aislamiento
SET TRANSACTION ISOLATION LEVEL
READ COMMITTED;
Cursores y procedimientos almacenados
Cursores
Permiten recorrer resultados fila a fila.
Fases principales
- DECLARE CURSOR
- FETCH
- CLOSE
Procedimientos almacenados
Bloques SQL reutilizables almacenados en el servidor.
Ejemplo
DELIMITER //
CREATE PROCEDURE aumentar_precios(
IN porcentaje DECIMAL(5,2)
)
BEGIN
UPDATE productos
SET precio = precio * (1 + porcentaje / 100);
END //
DELIMITER ;
Ejecución
CALL aumentar_precios(10);
Parámetros
| Tipo | Descripción |
|---|---|
| IN | Entrada |
| OUT | Salida |
| INOUT | Ambos |
Caso de estudio de una tienda online
Una tienda online necesitaba automatizar el control de stock.
Problema
- Productos agotados seguían apareciendo disponibles.
- Clientes realizaban pedidos inválidos.
- Había revisiones manuales constantes.
Solución
CREATE PROCEDURE actualizar_stock()
BEGIN
UPDATE productos
SET estado = 'agotado'
WHERE cantidad = 0;
END;
Ejecución automática
CALL actualizar_stock();
Resultados
- Menos errores.
- Automatización total.
- Mayor satisfacción del cliente.
- Menos carga técnica.
Triggers
Un trigger es un bloque SQL que se ejecuta automáticamente ante un evento.
Eventos posibles
- INSERT
- UPDATE
- DELETE
Tipos
| Tipo | Momento |
|---|---|
| BEFORE | Antes del evento |
| AFTER | Después del evento |
Palabras clave
- NEW → valores nuevos.
- OLD → valores antiguos.
Ejemplo
CREATE TRIGGER validar_precio
BEFORE INSERT ON productos
FOR EACH ROW
SET NEW.precio = ABS(NEW.precio);
Eventos programados
Los eventos programados permiten ejecutar tareas automáticas en momentos concretos.
Funcionamiento
Equivalen a cron jobs internos de MySQL.
Ejemplo
CREATE EVENT limpiar_temp
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM temporal
WHERE fecha < NOW() - INTERVAL 7 DAY;
Usos habituales
- Limpieza automática.
- Actualización de estadísticas.
- Procesos nocturnos.
- Replicación interna.
- Inventario automático.
Práctica aplicada
Empresa logística
Una empresa de transporte necesitaba notificar entregas automáticamente.
Problema
- Notificaciones tardías.
- Errores manuales.
- Clientes desinformados.
Trigger implementado
CREATE TRIGGER notificar_entrega
AFTER UPDATE ON pedidos
FOR EACH ROW
IF NEW.estado = 'entregado' THEN
INSERT INTO notificaciones
(id_pedido, fecha, mensaje)
VALUES
(NEW.id_pedido, NOW(), 'Pedido entregado');
END IF;
Beneficios
- Automatización total.
- Notificaciones en tiempo real.
- Menos errores humanos.
- Mayor satisfacción.
Consejos finales
Buenas prácticas
- Usa vistas para proteger datos.
- Documenta procedimientos.
- Evita cursores innecesarios.
- Controla duración de transacciones.
- Monitoriza eventos y triggers.
- Realiza backups frecuentes.
Comandos útiles
SHOW PROCEDURE STATUS;
SHOW EVENTS;
SHOW TRIGGERS;
Errores comunes
- Triggers encadenados.
- Transacciones demasiado largas.
- Abusar de SERIALIZABLE.
- No documentar automatizaciones.